﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;

namespace CPS1
{
    // NUDY: Patrz VaultSignal
    class ImpulseNoise : Signal
    {
        public Double n1; // numer pierwszej próbki
        public Double p; // prawdopodobieństwo pojawienia się próbki = 1
        private Random rand; // generator wartości losowych

        public ImpulseNoise(Double A, Double t1, Double d, Double p, Double f, String name) 
        {
            this.A = A;
            this.t1 = t1;
            this.d = d;
            this.f = f;
            this.name = name;
            this.periodical = false;
            this.discrete = true;
            this.rand = new Random();
            this.p = p;

            int amount = (int) Math.Ceiling(d * f);
            this.calculatedValues = new Double[amount, 2];
        }

        override public Double value(Double t) 
        {
            // bazujemy na tym, że Random generuje wartości losowe o rozkładzie jednostajnym.
            // zatem wybierając liczby z danego przedziału <0, p> gdzie p to prawdopodobieństwo
            // wystąpienia wartości a uzyskamy wartości losowe z żądanym prawdopodobieństwem
            Double randomNumber = this.rand.NextDouble();
            if (randomNumber <= this.p) return this.A;
            else return 0.0;
        }

        public override Signal copy()
        {
            ImpulseNoise copied = new ImpulseNoise(this.A, this.n1, this.d, this.p, this.f, this.name);
            copied.calculateSignal();
            return copied;
        }
    }
}
